package com.qidian.kk;

import java.util.*;
import java.util.function.Predicate;

/**
 * @Author: KK
 * @DateTime: 2024/10/24 16:34
 **/
public class OptionalDemo02 {

    public static void main(String[] args) {
        List<Author> authors = getAuthors();


        // 打印作家中年龄大于17并且姓名的长度大于1的作家。
        authors.stream()
                .filter(((Predicate<Author>) author -> author.getAge() > 17)
                        .and(author -> author.getName().length() > 1))
                .forEach(System.out::println);


        // 打印作家中年龄大于17或者姓名的长度小于2的作家。
        authors.stream()
                .filter(((Predicate<Author>) author -> author.getAge() > 10)
                .or(author -> author.getName().length() > 2))
                .forEach(System.out::println);



        // 打印作家中年龄不大于17的作家。
        authors.stream()
                .filter(((Predicate<Author>) author -> author.getAge() > 17)
                        .negate()) // 对filter的结果进行取反操作
                .forEach(author -> System.out.println(author.getAge()));
    }


    private static List<Author> getAuthors() {
        // 数据初始化
        Author author = new Author(1L, "蒙多", 19, "一个从菜刀中明悟哲理的祖安人", null);

        // 书籍列表
        List<Book> books1 = new ArrayList<>();

        books1.add(new Book(1L, "刀的两侧是光明与黑暗", "哲学,爱情", 88, "用一把刀划分了爱恨"));
        books1.add(new Book(2L, "一个人不能死在同一把刀下", "个人成长,爱情", 99, "讲述如何从失败中明悟真理"));

        author.setBooks(books1);

        return new ArrayList<>(Collections.singletonList(author));
    }

}
